<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    // Promise 承诺 表示未来某一个时间一定会返回一个承诺给你
    /** promise可以解决地狱回调的问题 ：新的请求要根据上一次请求的结果继续执行
     * pending(进行中)
     * fulfilled(已成功)
     * rejected(已失败)
     */
    {//一旦promise创建成功会立即执行
        let p1 = new Promise(function (reslove, reject) {//异步操作
            //成功时的回调
            reslove();
            //失败时的回调
            reject();
            console.log(1);//第一
        });

        p1.then(success => {//成功时执行
            console.log(2);//第三
        },
            err => {//失败时执行
                console.log(22);
            })

        console.log(3);//第二
    }
    //promise错误捕获
    {
        //cath 错误不会 指定发生错误时的回调函数
        //finally 无论如何都会执行
        let fn1 = (num) => {
            return new Promise((reslove, reject) => {
                if (num >= 0) {
                    reslove('大于等于0的数值')
                } else {
                    reslove('小于0的数值')
                }
            })
        }


        fn1(-1).then(success => {//成功时执行
            console.log(success);
            console.log('报错信息');
        },
            err => {//失败时执行
                console.log(err);
            }).catch(cat => {//捕获错误信息
                console.log('catch', cat);
            }).finally(fina => {//无论如何都会执行
                console.log('finally', fina);
            })

    }

    //普通代码错误捕获
    {//应用场景：在不同浏览器下 可能部分代码会报错 这个使用try catch进行错误捕获和浏览器兼容性处理
        try {
            console.log(1)
            console.log(2)
            console.log(3)
            console.log(4)
        } catch (err) {
            console.log(err);
        }
    }
    /*总结
    Promise对象是一个容器里面包裹了一些异步操作，它表示一个预计会在未来完成的异步操作
    它有三种状态：pending(进行中) fulfilled(已成功) rejected(已失败)
    它有两个参数：reslove(成功回调 reject(失败回调
    状态改变只有两种情况：进行中-->已成功或者已失败 状态一旦改变(已凝固)就不会再发生变化
    api:then('成功回调',[失败回调]) 状态一旦改变 promise.then函数方法不会执行
    *all
     race(瑞思) 谁最先完成就返回谁
    */ 
</script>